﻿#include <QApplication>

#include "manglobal.h"
#include "src/middle/gateway/gateway.h"
#include "src/middle/managers/manmodels.h"
#include "src/middle/managers/mansignals.h"
#include "src/middle/managers/manplugin.h"
#include "src/middle/managers/mancloud.h"
#include "src/middle/managers/mandb.h"

// 线程安全地创建全局静态对象
// 使用 Q_GLOBAL_STATIC 定义的对象在首次访问时才会被初始化
// 对象的初始化是线程安全的
Q_GLOBAL_STATIC(ManGlobal, ins)

ManGlobal::ManGlobal(QObject *parent): QObject{parent}
{
    mLog = new LoggerProxy(this);
    mCloud = new ManCloud(this);
    mDb = new ManDB(this);
    mSignal = new ManSignals(this);
    mPlugin = new ManPlugin(this);
    mGate = new GateWay(this);
    // mModels = new ManModels(this);
}

ManGlobal::~ManGlobal()
{
    qDebug("delete ManGlobal ");
}

ManGlobal *ManGlobal::instance()
{
    return ins();

    // ins() 后面的括号一定要加上
    // 因为 ins 本质上是一个 QGlobalStatic<ManGlobal> 对象
    // 这个对象内部重载了()获取对象的指针
}

void ManGlobal::init(int argc, char *argv[])
{
    mModels = new ManModels(this);
    FileHelper::mkPath(GLOBAL::PATH::LOG_DIR);
    FileHelper::mkPath(GLOBAL::PATH::TMP);

    mPlugin->installPlugins(argc, argv);

    QString qssStr = FileHelper::readAllTxt(":/static/qss/default.qss");
    qApp->setStyleSheet(qssStr);

    mDb->init();
}
